﻿#define _CRT_SECURE_NO_WARNINGS 1

//写一个宏，可以将一个整数的二进制位的奇数位和偶数位交换



#include <stdio.h>
//#define SWAP(num) (num = ((num&0x55555555)<<1)+((num&0xaaaaaaaa)>>1))
//
//int main()
//{
//    int num = 10;            //00000000000000000000000000001010    10
//    SWAP(num);
//    printf("%d", num);    //00000000000000000000000000000101    5
//    return 0;
//}

//
//int main()
//{
//	FILE* pf = fopen("c:\\code\\word.txt","w");
//	return 0;
//}

/*
给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。
请注意 ，必须在不复制数组的情况下原地对数组进行操作。
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
*/

void swap(int* a, int* b) {
    int t = *a;
    *a = *b, * b = t;
}

void moveZeroes(int* nums, int numsSize) {
    int left = 0, right = 0;
    while (right < numsSize) {
        if (nums[right]) {
            swap(nums + left, nums + right);
            left++;
        }
        right++;
    }
}
